package 校招笔试.阿里笔试;

import java.util.Scanner;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/3/16 19:02
 */
public class Main {

    /*
    https://leetcode.cn/circle/discuss/LwMkf4/
    注意一下, 这里 数据的范围, x 非常的大, dp 会爆 内存的!
    注意一下 这种类型的题目


    // 这个 第三题还是挺有意思的!, 可以去更好的理解一下!
    好像 使用 狄克斯特拉, 来写, 刚好可以练习一下图的写法!
     */


    /*
     2 4
    2
    1 2
    3 5
    3
    3 2 3
    5 6 7
     */

    // %40
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int cost = sc.nextInt();
        int nums[][][] = new int[n][40][2];
        for(int i = 0;i < n;i++){
            int m = sc.nextInt();
            for(int j = 0;j < m;j++){
                nums[i][j][0] = sc.nextInt();
            }
            for(int j = 0;j < m;j++){
                nums[i][j][1] = sc.nextInt();
            }
        }
        Integer dp[][] = new Integer[n + 1][cost + 1];
        System.out.println(recursion(0,cost,nums,dp));
    }

    public static int recursion(int index,int rest,int nums[][][],Integer dp[][]){
            if(index == nums.length && rest >= 0){
                return 0;
            }
            if(index == nums.length || rest < 0){
                return Integer.MIN_VALUE;
            }
            if(dp[index][rest] != null){
                return dp[index][rest];
            }
            int ans = Integer.MIN_VALUE,len = nums[index].length;
            for(int i = 0;i < len;i++){
                ans = Math.max(ans,recursion(index + 1,rest - nums[index][i][0],nums,dp) + nums[index][i][1]);
            }
            return dp[index][rest] = ans;
    }



    public static void main1(String[] args) {
        // 8462422080
        Scanner sc = new Scanner(System.in);
        String line = sc.next();
        char[] chars = line.trim().toCharArray();
        StringBuilder odd = new StringBuilder();
        StringBuilder even = new StringBuilder();

        for(int i = 0;i < chars.length;i++){
            int num = chars[i] - '0';
            if(num % 2 == 0){
                even.append(num);
            }
            else{
                odd.append(num);
            }
        }
        long o = odd.toString().equals("") ? 0 : Long.parseLong(odd.toString());
        long e = even.toString().equals("") ? 0 : Long.parseLong(even.toString());
//        System.out.println(Math.abs(Integer.parseInt(odd.toString()) - Integer.parseInt(even.toString())));
        System.out.println(Math.abs(o - e));
    }

}
